//@ts-nocheck
import {ELEMENT_TEXT} from './constants';

/**
 *
 * @param {} type
 * @param {*} config
 * @param {...any} children 放着所有的儿子
 */
function createElement(type, config, ...children){
  delete config.__self;
  delete config.__source; // 表示这个元素是在哪行哪咧哪个文件生成的


  /*
element:
{$$typeof: Symbol(react.element), type: "div", key: null, ref: null, props: {…}, …}

$$typeof: Symbol(react.element)
key: null
props:
  children: Array(3)
    0: "A1" //←← 源码里如果是一个普通文本(字符串or数字) 是不会包装成对象的
    1: {$$typeof: Symbol(react.element), type: "div", key: null, ref: null, props: {…}, …}
    2: {$$typeof: Symbol(react.element), type: "div", key: null, ref: null, props: {…}, …}
    length: 3
    __proto__: Array(0)
  id: "A1"
  style: {border: "3px solid red", margin: "5px"}
  __proto__: Object
ref: null
type: "div"
_owner: null
_store: {validated: false}
_self: null
_source: null
__proto__: Object
*/

  return {
    type,
    props:{
      ...config,
      children: children.map(child => {
        return typeof child === 'object' ? child : {
          type: ELEMENT_TEXT,
          props: {text: child, children: []}
        }/**←emmm react源码中是直接返回的文本内容 而不是我们这样一个对象 我们这样做是为了简化 统一处理; 并且这个儿子在源码中也不是一定是数组, 如果只有一个的话 它就不是数组...*/;
      })
    }
  }
}

const React = {
  createElement
};

export default React;
